/**
 * Created by lubin on 2018/5/20.
 * 常用工具类
 */
define(function(require, exports, module) {

	//定义全局属性
	var Module = module.constructor.prototype;

	Module.tn = {
		/**
		 * 模块之间跳转传递参数
		 */
		requestData: {},
		/**
		 * 类型判断
		 * public method :
		 * 		tn.type.isArray()
		 * 		tn.type.isBoolean()
		 * 		tn.type.isFunction()
		 * 		tn.type.isNull()
		 * 		tn.type.isNumber()
		 * 		tn.type.isObject()
		 * 		tn.type.isString()
		 * 		tn.type.isUndefined()
		 * 		tn.type.isDefined()
		 * 		tn.type.isNumeric()
		 * 		tn.type.isDate()
		 */
		type: {
			isArray: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (Array.isArray && !Array.isArray(c) || !(module.tn.type.isObject(c) && c.constructor && (c.constructor.toString().indexOf("Array") > -1 || c instanceof Array))) {
						return false;
					}
				}
				return true;
			},
			isBoolean: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (!(typeof c === "boolean" || module.tn.type.isObject(c) && c.constructor && (c.constructor.toString().indexOf("Boolean") > -1 || c instanceof Boolean))) {
						return false;
					}
				}
				return true;
			},
			isFunction: function() {
				for (var b = 0, a = arguments.length; b < a; b++) {
					if (typeof arguments[b] !== "function") {
						return false;
					}
				}
				return true;
			},
			isNull: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (c === null || module.tn.type.isUndefined(c)) {
						return true;
					}
				}
				return false;
			},
			isNumber: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (!(typeof c === "number" || module.tn.type.isObject(c) && c.constructor && (c.constructor.toString().indexOf("Number") > -1 || c instanceof Number)) || isNaN(c)) {
						return false;
					}
				}
				return true;
			},
			isObject: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (typeof c !== "object" || c === null) {
						return false;
					}
				}
				return true;
			},
			isString: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (!(typeof c === "string" || module.tn.type.isObject(c) && c.constructor && (c.constructor.toString().indexOf("String") > -1 || c instanceof String))) {
						return false;
					}
				}
				return true;
			},
			isUndefined: function() {
				for (var b = 0, a = arguments.length; b < a; b++) {
					if (typeof arguments[b] === "undefined") {
						return true;
					}
				}
				return false;
			},
			isDefined: function() {
				for (var a = 0; a < arguments.length; a++) {
					if (module.tn.type.isUndefined(arguments[a])) {
						return false;
					}
				}
				return true;
			},
			isNumeric: function() {
				for (var b = 0, c, a = arguments.length; b < a; b++) {
					c = arguments[b];
					if (!(!isNaN(c) && isFinite(c) && (c !== null) && !module.tn.type.isBoolean(c) && !module.tn.type.isArray(c))) {
						return false;
					}
				}
				return true;
			},
			isDate: function() {
				for (var b = 0, a = arguments.length; b < a; b++) {
					o = arguments[b];
					if (!(module.tn.type.isObject(o) && o.constructor && (o.constructor.toString().indexOf("Date") > -1 || o instanceof Date))) {
						return false;
					}
				}
				return true;
			}
		},
		/**
		 * 判断子页面是否存在项目中
		 */
		isPage: function(url){
			var flag = false;
			$.ajax({
				type: 'GET',
				url: url,
				async:false,//设为同步
				success: function(json){
					flag = true;
				},
				error: function(json){
					flag = false;
				}
			});
			return flag;
		},
		/**
		 * 异步加载子页面
		 */
		initPage: function(url){
			var self = this;
			if(!module.tn.type.isNull(url) && url.split("#").length > 1 && url.split("#")[1].split("&").length > 1){
				if(url.split("?").length > 1){
					self.requestData = url.split("?")[1];
				}
				var URI = url.split("?")[0];
				var id = URI.split("#")[1].split("&")[0];
				var name = URI.split("#")[1].split("&")[1];

				var url = './view/'+id+"/"+name+".html";
				if(module.tn.isPage(url)){
					require.async("."+url+"#", function(tpl) {
						$(".tn-body").html(tpl);

						require.async("../jsrc/"+id+"/"+name, function(main) {
							main.init();
						});
					});
				}else{
					require.async('../view/index.html#', function(tpl) {
						$(".tn-body").html(tpl);

						require.async('../jsrc/index', function(main) {
							main.init();
						});
					});
				}
			}else{
				require.async('../view/index.html#', function(tpl) {
					$(".tn-body").html(tpl);

					require.async('../jsrc/index', function(main) {
						main.init();
					});
				});
			}
		}
	}
});
